package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.util.Vector;

import negocio.Inconsistencia;
import negocio.Movimiento;
import controlador.Sistema;

public class perMovimiento {
	private Sistema sist; 
	private Movimiento mov;
	private int a,v,km;
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;
	public Movimiento select(int os)
	{
		try {
			mov=new Movimiento();
			sist=Sistema.getInstance();
			con=PoolConnection.getPoolConnection().getConnection();
			ps=con.prepareStatement("Select * from Movimiento where OS=?");
			ps.setInt(1, os);
			rs=ps.executeQuery();
			if(rs.next())
			{
				PreparedStatement ps2=con.prepareStatement("select DOMINIO from VEHICULO where ID_VEHICULO=?");
				ps2.setInt(1, rs.getInt(3));
				ResultSet rs2=ps2.executeQuery();
				if(rs2.next())
				{
					mov.setNroMovimiento(rs.getInt(1));
					mov.setOs(os);		
					mov.setVehiculo(sist.buscarVehiculo(rs2.getString(1)));
					mov.setTecnico(sist.buscarTecnico(rs.getInt(4)));
					mov.setNombreG(rs.getString(5));				
					mov.setSede(sist.buscarSede(rs.getInt(7)));
					System.out.println(rs.getString(8));
					mov.setFecha(rs.getDate(8));
					if(rs.getBoolean(6)==true)//existe una inconsistencia
					{
						perInconsistencia a=new perInconsistencia();
						Vector <Inconsistencia> inconsistencia =a.select(os);
						mov.setInconsistencias(inconsistencia);
					}else{
						mov.setInconsistencias(null);
					}
					
				}				
			}
			PoolConnection.getPoolConnection().releaseConnection(con);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return mov;
	}
	public Vector <Movimiento> select(String desde, String hasta)
	{
		Vector <Movimiento> v=new Vector <Movimiento>();
		try {
			mov=new Movimiento();
			sist=Sistema.getInstance();
			con=PoolConnection.getPoolConnection().getConnection();
			ps=con.prepareStatement("Select * from Movimiento where fecha between ? and ?");
			ps.setString(1,desde);
			ps.setString(2,hasta);
			rs=ps.executeQuery();
			while(rs.next())
			{
				PreparedStatement ps2=con.prepareStatement("select DOMINIO from VEHICULO where ID_VEHICULO=?");
				ps2.setInt(1, rs.getInt(3));
				ResultSet rs2=ps2.executeQuery();
				if(rs2.next())
				{
					mov.setNroMovimiento(rs.getInt(1));
					mov.setOs(rs.getInt(2));		
					mov.setVehiculo(sist.buscarVehiculo(rs2.getString(1)));
					mov.setTecnico(sist.buscarTecnico(rs.getInt(4)));
					mov.setNombreG(rs.getString(5));				
					mov.setSede(sist.buscarSede(rs.getInt(7)));
					java.sql.Date fechaSQL = rs.getDate(8);
					java.util.Date fecha = fechaSQL; 
					mov.setFecha(fecha);
					if(rs.getBoolean(6)==true)//existe una inconsistencia
					{
						perInconsistencia a=new perInconsistencia();
						Vector <Inconsistencia> inconsistencia =a.select(rs.getInt(2));
						mov.setInconsistencias(inconsistencia);
					}else{
						mov.setInconsistencias(null);
					}
					v.add(mov);
				}				
			}
			PoolConnection.getPoolConnection().releaseConnection(con);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return v;
	}
	
	public void insert(Movimiento m)
	{
		try {
			sist=Sistema.getInstance();
			con=PoolConnection.getPoolConnection().getConnection();
			ps=con.prepareStatement("select max(IDMOVIMIENTO) from MOVIMIENTO");
			rs=ps.executeQuery();		
			if(rs.next())
			{
				a=rs.getInt(1);
				a++;
				ps=con.prepareStatement("select ID_VEHICULO,kms from VEHICULO where DOMINIO=?");
				ps.setString(1, m.getVehiculo().getDominio());
				rs=ps.executeQuery();
				if(rs.next())
				{
					if(m.getTipo().equals("Ingreso"))
					{
						v=rs.getInt(1);
						ps=con.prepareStatement("insert into MOVIMIENTO values(?,?,?,?,?,?,?,?)");
						ps.setInt(1, a);
						ps.setInt(2, m.getOs());
						ps.setInt(3, v);
						ps.setInt(4, m.getTecnico().getDNI());
						ps.setString(5, sist.getLogins().getUsuario());
						if(m.getInconsistencias()!=null){
							if(m.getInconsistencias().size()>0)
							{
								perInconsistencia pi=new perInconsistencia();
								ps.setInt(6,1);//PUEDE TENER VARIAS INCONSISTENCIAS
								for(int i=0;i<m.getInconsistencias().size();i++)
								{
										pi.insert(m.getInconsistencias().get(i));
								}
							}
						}else{
							ps.setInt(6,0);
						}
						ps.setInt(7,m.getSede().getNroSede());
						ps.setDate(8, (Date) m.getFecha());
						//System.out.println("Mirar fecha MOVIMIENTO");
						ps.execute();
						ps=con.prepareStatement("Update Vehiculo set Kms=? set EnViaje=false where ID_VEHICULO=?");
						ps.setInt(1, m.getKm());
						ps.setInt(2, v);
					}else
					{
						v=rs.getInt(1);
						ps=con.prepareStatement("insert into MOVIMIENTO values(?,?,?,?,?,?,?,?)");
						ps.setInt(1, a);
						ps.setInt(2, m.getOs());
						ps.setInt(3, v);
						ps.setInt(4, m.getTecnico().getDNI());
						ps.setString(5, sist.getLogins().getUsuario());
						ps.setBoolean(6,false);
						ps.setInt(7,m.getSede().getNroSede());
						ps.setDate(8, (Date) m.getFecha());
						ps.execute();
						ps=con.prepareStatement("Update Vehiculo set EnViaje=true where ID_VEHICULO=?");
						ps.setInt(1, v);
					}					
					
				}
				
			}							
			PoolConnection.getPoolConnection().releaseConnection(con);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	
}
